Skip to content

feat: add linkat - #1334

Merged
Yaxuan-w merged 4 commits into
mainfrom
add-linkat
Aug 12, 2026
Merged

Yaxuan-w merged 4 commits into
mainfrom
add-linkat

Conversation

@Yaxuan-w

@Yaxuan-w Yaxuan-w commented Jul 28, 2026

Copy link
Copy Markdown
Member

Summary

linkat in glibc is not using make_legacy_syscall which will always return success.

Update linkat in glibc to use make_legacy_syscall

Related issues

Resolves #1332

Testing

New test case added in this PR

Checklist

  • I have read the contribution guidelines.
  • I added or updated tests where appropriate.
  • I ran the relevant tests locally and they pass.
  • I formatted the code and ran the relevant linters.
  • I updated documentation for user-visible or architectural changes.
  • I disclosed security vulnerabilities privately rather than in this PR.

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview
grate harness

Grate Test Report

MetricValue
Total15
Success15
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/copy-handler-table_grate.cSuccess
STDOUT:
[Grate|copy-handler-table] Registering geteuid handler for cage 2 in grate 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Cage|copy-handler-table] PASS: child inherited handler, then overwrite changed geteuid to 0
[Cage|copy-handler-table] PASS: parent=123 child_exit=0
[Grate|copy-handler-table] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.059763s4.102558s
Success
thread.cSuccessNone0.050742s4.145199s
Success
tls_test.cSuccessNone0.057186s4.159791s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases237
Number of Successes235
Number of Failures2
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure2
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
basic.cSuccessNone0.054299s0.130955s
Success
dlopen_fork.cSuccessNone0.054062s0.163980s
Success
dlopen_thread.cSuccessNone0.057442s0.158953s
Success
double_fork_dlopen.cSuccessNone0.061954s0.218375s
Success
fork_dlopen.cSuccessNone0.059439s0.161195s
Success
longjmp_dlopen.cSuccessNone0.053608s0.149520s
Success
rdynamic_main.cSuccessNone0.056545s0.161066s
Success
File Tests
chartests.cSuccessNone0.052154s0.153492s
Success
chdir_getcwd.cSuccessNone0.052733s0.131342s
Success
chmod.cSuccessNone0.057910s0.137273s
Success
clock_gettime_highlevel.cSuccessNone0.124596s0.185129s
Success
clock_gettime_simple.cSuccessNone0.046666s0.115859s
Success
cloexec.cSuccessNone0.055774s0.156487s
Success
close.cSuccessNone0.065489s0.151142s
Success
copy_file_range.cFailureUnknown_Failure0.054938s0.147007s
failed to run main module

Caused by:
0: failed to invoke command default
1: unknown import: env::copy_file_range has not been defined

creat_access.cSuccessNone0.055711s0.126427s
Success
cross_cage_fd_bruteforce.cSuccessNone0.057206s0.196933s
Success
doubleclose.cSuccessNone0.048980s0.114456s
Success
dup.cSuccessNone0.048283s0.126868s
Success
dup2.cSuccessNone0.054682s0.129642s
Success
dup3.cSuccessNone0.053721s0.127943s
Success
dupwrite.cSuccessNone0.055489s0.126310s
Success
etc_conf.cSuccessNone0.051435s0.131985s
Success
faccessat.cSuccessNone0.051594s0.127317s
Success
fchdir.cSuccessNone0.057650s0.142324s
Success
fchmod.cSuccessNone0.056980s0.138822s
Success
fchmodat.cSuccessNone0.052450s0.125120s
Success
fcntl.cSuccessNone0.055396s0.146928s
Success
fcntl_dupfd.cSuccessNone0.049267s0.119223s
Success
fdatasync.cSuccessNone0.054456s0.126074s
Success
filetest.cSuccessNone0.055041s0.126652s
Success
filetest1000.cSuccessNone0.064886s0.138106s
Success
flock.cSuccessNone0.088571s0.176263s
Success
fstat.cSuccessNone0.056947s0.140974s
Success
fstatfs.cSuccessNone0.050680s0.121506s
Success
fsync.cSuccessNone0.054409s0.125554s
Success
ftruncate.cSuccessNone0.059028s0.221943s
Success
getcwd.cSuccessNone0.051863s0.116601s
Success
getcwd_null.cSuccessNone0.055989s0.129625s
Success
getpgid.cSuccessNone0.049422s0.115512s
Success
getrandom.cSuccessNone0.055054s0.136533s
Success
ioctl.cSuccessNone0.060078s0.132997s
Success
link.cSuccessNone0.057658s0.167176s
Success
linkat.cFailureUnknown_Failure0.058553s0.182123s
Testing linkat() syscall

thread 'main' (1611) panicked at /src/wasmtime/crates/threei/src/handler_table/hashmap_impl.rs:89:9:
[3i|_get_handler] no handler for syscall_num: 265 in self_cageid: 1
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

locale_test.cSuccessNone0.066081s0.326772s
Success
lseek.cSuccessNone0.059434s0.198492s
Success
lstat.cSuccessNone0.058814s0.147716s
Success
mkdir_rmdir.cSuccessNone0.056390s0.130569s
Success
mkfifo_test.cSuccessNone0.061643s0.183171s
Success
mknod.cSuccessNone0.054726s0.139412s
Success
nocancel_io.cSuccessNone0.058456s0.151246s
Success
open.cSuccessNone0.050570s0.121732s
Success
openat.cSuccessNone0.051996s0.124058s
Success
path_conversion_safety.cSuccessNone0.060104s0.143778s
Success
ppoll.cSuccessNone0.059296s0.134384s
Success
pread_pwrite.cSuccessNone0.053772s0.128549s
Success
preadv_pwritev.cSuccessNone0.058521s0.145790s
Success
printf.cSuccessNone0.048061s0.110527s
Success
prlimit64.cSuccessNone0.049511s0.114849s
Success
read.cSuccessNone0.056075s0.138718s
Success
readbytes.cSuccessNone0.051594s0.123527s
Success
readdir_basic.cSuccessNone0.060884s0.161906s
Success
readlink.cSuccessNone0.055141s0.132592s
Success
readlinkat.cSuccessNone0.057145s0.139011s
Success
readv_writev_test.cSuccessNone0.057500s0.138709s
Success
rename.cSuccessNone0.057670s0.134167s
Success
renameat.cSuccessNone0.058625s0.141712s
Success
sc-writev.cSuccessNone0.053824s0.129185s
Success
stat.cSuccessNone0.056409s0.137895s
Success
statfs.cSuccessNone0.050538s0.119650s
Success
symlink.cSuccessNone0.057463s0.161420s
Success
sync_file_range.cSuccessNone0.054042s0.121998s
Success
timespec_time_t_compat.cSuccessNone0.053171s0.119628s
Success
trailing_slash.cSuccessNone0.055097s0.135261s
Success
truncate.cSuccessNone0.057050s0.150917s
Success
unlink.cSuccessNone0.059289s0.180991s
Success
unlinkat.cSuccessNone0.059768s0.151634s
Success
utimensat.cSuccessNone0.054106s0.143235s
Success
write.cSuccessNone0.048871s0.110401s
Success
writeloop.cSuccessNone0.058259s0.127152s
Success
writepartial.cSuccessNone0.056754s0.120630s
Success
writev.cSuccessNone0.057769s0.135436s
Success
Math Tests
math_link_smoke.cSuccessNone0.064416s0.135065s
Success
math_tests.cSuccessNone0.066289s0.168087s
Success
printf_float.cSuccessNone0.061147s0.157409s
Success
Memory Tests
brk.cSuccessNone0.064634s0.140287s
Success
fork_large_memory.cSuccessNone0.086453s0.495786s
Success
malloc.cSuccessNone0.057971s0.129932s
Success
malloc_large.cSuccessNone0.054178s0.115826s
Success
memcpy.cSuccessNone0.054108s0.128597s
Success
memory_error_test.cSuccessNone0.062824s0.162537s
Success
mmap.cSuccessNone0.054965s0.138900s
Success
mmap_address_truncation.cSuccessNone0.058398s0.135105s
Success
mmap_aligned.cSuccessNone0.052333s0.135803s
Success
mmap_complicated.cSuccessNone0.057777s0.167630s
Success
mmap_file.cSuccessNone0.057580s0.144049s
Success
mmap_shared.cSuccessNone0.058150s0.173303s
Success
mmaptest.cSuccessNone0.051271s0.135543s
Success
mprotect.cSuccessNone0.055230s0.130838s
Success
mprotect_boundary.cSuccessNone0.054399s0.142793s
Success
mprotect_end_region.cSuccessNone0.053091s0.145898s
Success
mprotect_middle_region.cSuccessNone0.053848s0.137599s
Success
mprotect_multiple_times.cSuccessNone0.054770s0.141674s
Success
mprotect_same_value.cSuccessNone0.054903s0.130537s
Success
mprotect_spanning_regions.cSuccessNone0.052804s0.142593s
Success
munmap_adjacent_shm.cSuccessNone0.061475s0.151325s
Success
sbrk.cSuccessNone0.053567s0.123254s
Success
segfault.cSuccessNone0.063535s0.190963s
Success
shm.cSuccessNone0.057255s0.171816s
Success
shmtest.cSuccessNone0.053204s0.124919s
Success
thread_malloc_sequential.cSuccessNone0.061495s0.220205s
Success
vtable.cSuccessNone0.063592s0.135876s
Success
Networking Tests
accept4.cSuccessNone0.060108s0.142504s
Success
dns_resolve_test.cSuccessNone0.056292s0.128504s
Success
dnstest.cSuccessNone0.056229s0.131916s
Success
epoll_badfd.cSuccessNone0.051638s0.118140s
Success
epoll_edge_triggered.cSuccessNone0.212870s0.387687s
Success
epollcreate1.cSuccessNone0.055909s0.136957s
Success
error_handling_net.cSuccessNone0.063473s0.201182s
Success
getaddrinfo_test.cSuccessNone0.058522s0.163743s
Success
getaddrinfo_unspec.cSuccessNone0.068302s0.178992s
Success
gethostname.cSuccessNone0.050036s0.115203s
Success
getifaddrs.cSuccessNone0.057782s0.133586s
Success
getsockname.cSuccessNone0.057503s0.135313s
Success
getsockopt.cSuccessNone0.058003s0.170040s
Success
ipv6_basic.cSuccessNone0.059841s0.169186s
Success
makepipe.cSuccessNone0.050460s0.111697s
Success
nonblocking_eagain.cSuccessNone0.058931s0.173050s
Success
pipe.cSuccessNone0.058211s0.138827s
Success
pipe2.cSuccessNone0.058261s0.127266s
Success
pipeinput.cSuccessNone0.059657s0.167916s
Success
pipeinput2.cSuccessNone0.059182s0.170711s
Success
pipeonestring.cSuccessNone0.059770s0.166138s
Success
pipepong.cSuccessNone0.058492s0.169833s
Success
pipewrite.cSuccessNone0.052629s0.130842s
Success
poll.cSuccessNone0.055744s0.123512s
Success
recvfrom-sendto.cSuccessNone0.058004s0.143847s
Success
sendmsg_recvmsg_test.cSuccessNone0.058182s0.142371s
Success
serverclient.cSuccessNone0.058115s0.141559s
Success
shutdown.cSuccessNone0.056836s0.137464s
Success
shutdown_fork.cSuccessNone0.057371s0.159088s
Success
simple-select.cSuccessNone0.059984s0.164638s
Success
simple_epoll.cSuccessNone0.056584s0.136261s
Success
socket.cSuccessNone0.055831s0.128362s
Success
socket_cloexec.cSuccessNone0.055301s0.122914s
Success
socket_options_advanced.cSuccessNone0.062052s0.187423s
Success
socketepoll.cSuccessNone0.054135s0.125789s
Success
socketpair.cSuccessNone0.055590s0.153256s
Success
socketselect.cSuccessNone0.056353s0.132549s
Success
udp_send_recv.cSuccessNone0.162056s0.285484s
Success
uds-getsockname.cSuccessNone0.057126s0.126169s
Success
uds-nb-select.cSuccessNone2.066752s2.201136s
Success
uds-serverclient.cSuccessNone0.059687s0.176304s
Success
uds-socketselect.cSuccessNone0.057330s0.136419s
Success
uds_listen_poll.cSuccessNone1.063045s1.179100s
Success
writev_socket.cSuccessNone0.060363s0.165492s
Success
Process Tests
barrier_test.cSuccessNone0.054513s0.151788s
Success
chain_thread.cSuccessNone1.065805s1.154269s
Success
ctor_syscall_test.cSuccessNone0.048597s0.115072s
Success
cxa_atexit_test.cSuccessNone0.051388s0.119138s
Success
exec_non_utf8.cSuccessNone0.055364s0.131696s
Success
execve_shebang.cSuccessNone0.055753s0.126949s
Success
exit.cSuccessNone0.052978s0.117525s
Success
exit_failure.cSuccessNone0.055373s0.146906s
Success
exit_group_thread.cSuccessNone0.056432s0.167598s
Success
exit_status_first_wins.cSuccessNone0.058065s0.168271s
Success
flockfile_test.cSuccessNone0.056554s0.160548s
Success
fork2malloc.cSuccessNone0.056100s0.150566s
Success
fork_select.cSuccessNone0.054681s0.161585s
Success
fork_simple.cSuccessNone0.054524s0.144769s
Success
fork_syscall.cSuccessNone0.059663s0.646772s
Success
fork_tls_ctype.cSuccessNone0.058067s0.171457s
Success
forkandopen.cSuccessNone0.057871s0.164213s
Success
forkdup.cSuccessNone0.058479s0.160806s
Success
forkexecuid.cSuccessNone0.054609s0.166598s
Success
forkexecv-arg.cSuccessNone0.054483s0.175063s
Success
forkexecv.cSuccessNone0.052797s0.157328s
Success
forkfiles.cSuccessNone0.060087s0.156148s
Success
forkmalloc.cSuccessNone0.056137s0.148648s
Success
forknodup.cSuccessNone0.057951s0.160411s
Success
function-ptr.cSuccessNone0.051861s0.119104s
Success
getegid_syscall.cSuccessNone0.055993s0.514490s
Success
getgid_syscall.cSuccessNone0.057713s0.530271s
Success
getpid.cSuccessNone0.050133s0.113669s
Success
getpid_syscall.cSuccessNone0.058496s0.512600s
Success
getppid.cSuccessNone0.056040s0.145280s
Success
getppid_syscall.cSuccessNone0.059568s0.426373s
Success
getuid.cSuccessNone0.056037s0.122478s
Success
getuid_syscall.cSuccessNone0.054428s0.267257s
Success
hello-arg.cSuccessNone0.047717s0.120145s
Success
hello.cSuccessNone0.047322s0.109324s
Success
longjmp.cSuccessNone0.048065s0.119912s
Success
mutex.cSuccessNone2.058560s2.142672s
Success
printf_deadlock_smoke.cSuccessNone0.063855s0.178278s
Success
printf_thread_test.cSuccessNone0.055217s0.160332s
Success
sem_forks.cSuccessNone0.059518s0.199101s
Success
sem_slow_path.cSuccessNone1.058401s1.155421s
Success
setjmp_edge.cSuccessNone0.052346s0.215272s
Success
setsid.cSuccessNone0.049740s0.112995s
Success
template.cSuccessNone0.054874s0.201325s
Success
test_crossmodule_longjmp.cSuccessNone0.056988s0.157520s
Success
test_exec_nofork.cSuccessNone0.054249s0.146300s
Success
test_unlink_open_file.cSuccessNone0.052210s0.115404s
Success
thread-guard.cSuccessNone0.053833s0.140951s
Success
thread-test.cSuccessNone0.051519s0.138047s
Success
thread.cSuccessNone0.052051s0.131114s
Success
thread_cageid_race.cSuccessNone0.052871s0.308121s
Success
tls_test.cSuccessNone0.055276s0.174220s
Success
uname.cSuccessNone0.049808s0.120059s
Success
wait.cSuccessNone0.054995s0.175928s
Success
waitpid_anychild.cSuccessNone0.057078s0.149197s
Success
waitpid_syscall.cSuccessNone1.056994s1.251032s
Success
waitpid_wnohang.cSuccessNone0.057000s0.156241s
Success
Signal Tests
alarm.cSuccessNone7.054209s7.158293s
Success
eintr_fork_signal.cSuccessNone1.059486s1.171818s
Success
kill.cSuccessNone1.054873s1.149892s
Success
pause_test.cSuccessNone1.055813s1.264704s
Success
setitimer.cSuccessNone7.056463s7.161545s
Success
sigalrm.cSuccessNone2.055593s2.145156s
Success
sigaltstack.cSuccessNone0.056867s0.143502s
Success
sigchld.cSuccessNone1.057826s1.153797s
Success
signal-fork.cSuccessNone4.056533s4.149562s
Success
signal-simple.cSuccessNone0.058134s0.128745s
Success
signal_SIGCHLD.cSuccessNone0.054590s0.154775s
Success
signal_fork.cSuccessNone0.057153s0.182554s
Success
signal_int_ignored.cSuccessNone2.055560s2.148887s
Success
signal_kill_cleanup.cSuccessNone1.053640s1.142734s
Success
signal_procmask.cSuccessNone0.050548s0.125385s
Success
signal_read_interrupt.cSuccessNone0.560324s0.653210s
Success
signal_recursive.cSuccessNone0.099636s0.138226s
Success
signal_sa_mask.cSuccessNone0.051592s0.124989s
Success
signal_select_interrupt.cSuccessNone0.559018s0.654284s
Success
signal_write_interrupt.cSuccessNone1.057615s1.144237s
Success
sigpipe.cSuccessNone1.058774s1.157703s
Success
sigprocmask.cSuccessNone1.056396s1.132930s
Success
sigsuspend_test.cSuccessNone1.053352s1.151998s
Success
test_sigsetjmp.cSuccessNone0.055583s0.158154s
Success

Fail Tests

Summary

MetricCount
Total Test Cases6
Number of Successes6
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.052663s0.127914s
Success
Memory Tests
invalid_access_direct.cSuccessNone0.117515s0.123372s
Success
invalid_access_fork.cSuccessNone0.147324s0.159234s
Success
mmap-negative1.cSuccessNone0.129069s0.140117s
Success
mmap-negative2.cSuccessNone0.134258s0.135622s
Success
Signal Tests
signal_resethand.cSuccessNone1.058273s1.231771s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.400010s8.428422s
LIBCPP_SORT_OK 1 2 3

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview
grate harness

Grate Test Report

MetricValue
Total15
Success15
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/copy-handler-table_grate.cSuccess
STDOUT:
[Grate|copy-handler-table] Registering geteuid handler for cage 2 in grate 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Cage|copy-handler-table] PASS: child inherited handler, then overwrite changed geteuid to 0
[Cage|copy-handler-table] PASS: parent=123 child_exit=0
[Grate|copy-handler-table] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.063720s4.135635s
Success
thread.cSuccessNone0.058397s4.176024s
Success
tls_test.cSuccessNone0.063362s4.185291s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases237
Number of Successes237
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
basic.cSuccessNone0.056948s0.146236s
Success
dlopen_fork.cSuccessNone0.060715s0.209097s
Success
dlopen_thread.cSuccessNone0.068768s0.170790s
Success
double_fork_dlopen.cSuccessNone0.068708s0.216325s
Success
fork_dlopen.cSuccessNone0.062819s0.180774s
Success
longjmp_dlopen.cSuccessNone0.065777s0.159389s
Success
rdynamic_main.cSuccessNone0.061143s0.166796s
Success
File Tests
chartests.cSuccessNone0.057473s0.163522s
Success
chdir_getcwd.cSuccessNone0.058069s0.135411s
Success
chmod.cSuccessNone0.063617s0.151373s
Success
clock_gettime_highlevel.cSuccessNone0.129590s0.190202s
Success
clock_gettime_simple.cSuccessNone0.052923s0.122675s
Success
cloexec.cSuccessNone0.062581s0.161434s
Success
close.cSuccessNone0.071157s0.159042s
Success
copy_file_range.cSuccessNone0.062927s0.160679s
Success
creat_access.cSuccessNone0.062649s0.133537s
Success
cross_cage_fd_bruteforce.cSuccessNone0.062693s0.208031s
Success
doubleclose.cSuccessNone0.054363s0.117858s
Success
dup.cSuccessNone0.054892s0.135362s
Success
dup2.cSuccessNone0.061400s0.133595s
Success
dup3.cSuccessNone0.057895s0.131545s
Success
dupwrite.cSuccessNone0.061441s0.134444s
Success
etc_conf.cSuccessNone0.055938s0.139943s
Success
faccessat.cSuccessNone0.057670s0.136001s
Success
fchdir.cSuccessNone0.064281s0.143905s
Success
fchmod.cSuccessNone0.064040s0.146304s
Success
fchmodat.cSuccessNone0.057923s0.130741s
Success
fcntl.cSuccessNone0.059434s0.145445s
Success
fcntl_dupfd.cSuccessNone0.056034s0.129481s
Success
fdatasync.cSuccessNone0.060664s0.134606s
Success
filetest.cSuccessNone0.060975s0.127217s
Success
filetest1000.cSuccessNone0.070946s0.151480s
Success
flock.cSuccessNone0.070683s0.185343s
Success
fstat.cSuccessNone0.061830s0.149121s
Success
fstatfs.cSuccessNone0.057000s0.129725s
Success
fsync.cSuccessNone0.059928s0.131454s
Success
ftruncate.cSuccessNone0.065274s0.232270s
Success
getcwd.cSuccessNone0.057177s0.125864s
Success
getcwd_null.cSuccessNone0.062089s0.138067s
Success
getpgid.cSuccessNone0.055891s0.126564s
Success
getrandom.cSuccessNone0.060407s0.148323s
Success
ioctl.cSuccessNone0.065777s0.144514s
Success
link.cSuccessNone0.064433s0.178058s
Success
linkat.cSuccessNone0.064198s0.196032s
Success
locale_test.cSuccessNone0.070403s0.336844s
Success
lseek.cSuccessNone0.064885s0.208563s
Success
lstat.cSuccessNone0.064366s0.157693s
Success
mkdir_rmdir.cSuccessNone0.061671s0.140072s
Success
mkfifo_test.cSuccessNone0.067575s0.191556s
Success
mknod.cSuccessNone0.060090s0.147125s
Success
nocancel_io.cSuccessNone0.064489s0.157273s
Success
open.cSuccessNone0.055839s0.122700s
Success
openat.cSuccessNone0.057686s0.135151s
Success
path_conversion_safety.cSuccessNone0.066321s0.154578s
Success
ppoll.cSuccessNone0.064665s0.145664s
Success
pread_pwrite.cSuccessNone0.059664s0.140912s
Success
preadv_pwritev.cSuccessNone0.063305s0.151786s
Success
printf.cSuccessNone0.052909s0.115577s
Success
prlimit64.cSuccessNone0.055806s0.123707s
Success
read.cSuccessNone0.062077s0.142822s
Success
readbytes.cSuccessNone0.058791s0.129723s
Success
readdir_basic.cSuccessNone0.065482s0.166393s
Success
readlink.cSuccessNone0.061103s0.140712s
Success
readlinkat.cSuccessNone0.063359s0.148659s
Success
readv_writev_test.cSuccessNone0.064128s0.145823s
Success
rename.cSuccessNone0.063397s0.137419s
Success
renameat.cSuccessNone0.064149s0.154326s
Success
sc-writev.cSuccessNone0.059321s0.139629s
Success
stat.cSuccessNone0.062047s0.143619s
Success
statfs.cSuccessNone0.056440s0.127151s
Success
symlink.cSuccessNone0.065093s0.164432s
Success
sync_file_range.cSuccessNone0.061074s0.129990s
Success
timespec_time_t_compat.cSuccessNone0.058068s0.126637s
Success
trailing_slash.cSuccessNone0.059722s0.138270s
Success
truncate.cSuccessNone0.063601s0.156443s
Success
unlink.cSuccessNone0.063437s0.171482s
Success
unlinkat.cSuccessNone0.063249s0.156322s
Success
utimensat.cSuccessNone0.059854s0.155437s
Success
write.cSuccessNone0.054732s0.117937s
Success
writeloop.cSuccessNone0.062407s0.133595s
Success
writepartial.cSuccessNone0.063497s0.129656s
Success
writev.cSuccessNone0.062652s0.138401s
Success
Math Tests
math_link_smoke.cSuccessNone0.103689s0.166904s
Success
math_tests.cSuccessNone0.088765s0.284002s
Success
printf_float.cSuccessNone0.069081s0.158545s
Success
Memory Tests
brk.cSuccessNone0.061090s0.143052s
Success
fork_large_memory.cSuccessNone0.097739s0.519593s
Success
malloc.cSuccessNone0.063236s0.145798s
Success
malloc_large.cSuccessNone0.062822s0.142933s
Success
memcpy.cSuccessNone0.068912s0.149330s
Success
memory_error_test.cSuccessNone0.069886s0.177664s
Success
mmap.cSuccessNone0.055872s0.129144s
Success
mmap_address_truncation.cSuccessNone0.068181s0.258539s
Success
mmap_aligned.cSuccessNone0.060685s0.151456s
Success
mmap_complicated.cSuccessNone0.065087s0.194918s
Success
mmap_file.cSuccessNone0.067892s0.153658s
Success
mmap_shared.cSuccessNone0.072459s0.195472s
Success
mmaptest.cSuccessNone0.058610s0.133243s
Success
mprotect.cSuccessNone0.057944s0.128775s
Success
mprotect_boundary.cSuccessNone0.063797s0.158857s
Success
mprotect_end_region.cSuccessNone0.057434s0.138469s
Success
mprotect_middle_region.cSuccessNone0.057122s0.150658s
Success
mprotect_multiple_times.cSuccessNone0.076121s0.154113s
Success
mprotect_same_value.cSuccessNone0.057776s0.145084s
Success
mprotect_spanning_regions.cSuccessNone0.059846s0.154512s
Success
munmap_adjacent_shm.cSuccessNone0.061715s0.149722s
Success
sbrk.cSuccessNone0.070014s0.164454s
Success
segfault.cSuccessNone0.062948s0.188679s
Success
shm.cSuccessNone0.065125s0.177307s
Success
shmtest.cSuccessNone0.060718s0.138451s
Success
thread_malloc_sequential.cSuccessNone0.067084s0.255645s
Success
vtable.cSuccessNone0.070613s0.154557s
Success
Networking Tests
accept4.cSuccessNone0.066261s0.147834s
Success
dns_resolve_test.cSuccessNone0.060273s0.133455s
Success
dnstest.cSuccessNone0.060467s0.133829s
Success
epoll_badfd.cSuccessNone0.056658s0.121220s
Success
epoll_edge_triggered.cSuccessNone0.217175s0.392726s
Success
epollcreate1.cSuccessNone0.060757s0.147434s
Success
error_handling_net.cSuccessNone0.068293s0.212038s
Success
getaddrinfo_test.cSuccessNone0.062687s0.169818s
Success
getaddrinfo_unspec.cSuccessNone0.070310s0.141097s
Success
gethostname.cSuccessNone0.055261s0.118424s
Success
getifaddrs.cSuccessNone0.063967s0.146752s
Success
getsockname.cSuccessNone0.063380s0.139914s
Success
getsockopt.cSuccessNone0.063594s0.171626s
Success
ipv6_basic.cSuccessNone0.065289s0.173607s
Success
makepipe.cSuccessNone0.054883s0.118580s
Success
nonblocking_eagain.cSuccessNone0.063932s0.179316s
Success
pipe.cSuccessNone0.062243s0.146860s
Success
pipe2.cSuccessNone0.063727s0.141149s
Success
pipeinput.cSuccessNone0.064414s0.172408s
Success
pipeinput2.cSuccessNone0.065530s0.182095s
Success
pipeonestring.cSuccessNone0.065309s0.180769s
Success
pipepong.cSuccessNone0.063548s0.175424s
Success
pipewrite.cSuccessNone0.057395s0.132347s
Success
poll.cSuccessNone0.060729s0.133523s
Success
recvfrom-sendto.cSuccessNone0.063216s0.148816s
Success
sendmsg_recvmsg_test.cSuccessNone0.061399s0.151189s
Success
serverclient.cSuccessNone0.063003s0.151212s
Success
shutdown.cSuccessNone0.062338s0.150209s
Success
shutdown_fork.cSuccessNone0.063796s0.163399s
Success
simple-select.cSuccessNone0.062155s0.169560s
Success
simple_epoll.cSuccessNone0.060749s0.137446s
Success
socket.cSuccessNone0.061359s0.140262s
Success
socket_cloexec.cSuccessNone0.060406s0.129084s
Success
socket_options_advanced.cSuccessNone0.066121s0.195451s
Success
socketepoll.cSuccessNone0.059743s0.135182s
Success
socketpair.cSuccessNone0.060650s0.154189s
Success
socketselect.cSuccessNone0.060952s0.139162s
Success
udp_send_recv.cSuccessNone0.167612s0.293402s
Success
uds-getsockname.cSuccessNone0.062701s0.133408s
Success
uds-nb-select.cSuccessNone2.071757s2.208732s
Success
uds-serverclient.cSuccessNone0.064006s0.180292s
Success
uds-socketselect.cSuccessNone0.063173s0.142727s
Success
uds_listen_poll.cSuccessNone1.067562s1.190912s
Success
writev_socket.cSuccessNone0.064758s0.173978s
Success
Process Tests
barrier_test.cSuccessNone0.061516s0.159514s
Success
chain_thread.cSuccessNone1.063434s1.162204s
Success
ctor_syscall_test.cSuccessNone0.052632s0.121256s
Success
cxa_atexit_test.cSuccessNone0.056529s0.126606s
Success
exec_non_utf8.cSuccessNone0.060029s0.132524s
Success
execve_shebang.cSuccessNone0.061629s0.139475s
Success
exit.cSuccessNone0.059200s0.128322s
Success
exit_failure.cSuccessNone0.059100s0.152015s
Success
exit_group_thread.cSuccessNone0.061823s0.180567s
Success
exit_status_first_wins.cSuccessNone0.063157s0.179043s
Success
flockfile_test.cSuccessNone0.059365s0.165108s
Success
fork2malloc.cSuccessNone0.062335s0.160528s
Success
fork_select.cSuccessNone0.058515s0.167673s
Success
fork_simple.cSuccessNone0.059915s0.157979s
Success
fork_syscall.cSuccessNone0.065735s0.677406s
Success
fork_tls_ctype.cSuccessNone0.063634s0.183698s
Success
forkandopen.cSuccessNone0.062639s0.170013s
Success
forkdup.cSuccessNone0.062612s0.161195s
Success
forkexecuid.cSuccessNone0.058684s0.173409s
Success
forkexecv-arg.cSuccessNone0.058819s0.172270s
Success
forkexecv.cSuccessNone0.058161s0.165700s
Success
forkfiles.cSuccessNone0.063609s0.162126s
Success
forkmalloc.cSuccessNone0.062385s0.154438s
Success
forknodup.cSuccessNone0.062169s0.167928s
Success
function-ptr.cSuccessNone0.056997s0.122334s
Success
getegid_syscall.cSuccessNone0.061132s0.512390s
Success
getgid_syscall.cSuccessNone0.063403s0.533916s
Success
getpid.cSuccessNone0.053450s0.119291s
Success
getpid_syscall.cSuccessNone0.063387s0.551232s
Success
getppid.cSuccessNone0.060908s0.156467s
Success
getppid_syscall.cSuccessNone0.065100s0.444899s
Success
getuid.cSuccessNone0.061243s0.130407s
Success
getuid_syscall.cSuccessNone0.060046s0.271731s
Success
hello-arg.cSuccessNone0.051899s0.122500s
Success
hello.cSuccessNone0.051876s0.116526s
Success
longjmp.cSuccessNone0.052633s0.126456s
Success
mutex.cSuccessNone2.064509s2.149669s
Success
printf_deadlock_smoke.cSuccessNone0.068244s0.191966s
Success
printf_thread_test.cSuccessNone0.061319s0.165035s
Success
sem_forks.cSuccessNone0.064678s0.204692s
Success
sem_slow_path.cSuccessNone1.064114s1.166356s
Success
setjmp_edge.cSuccessNone0.058607s0.224506s
Success
setsid.cSuccessNone0.055533s0.127087s
Success
template.cSuccessNone0.060098s0.220392s
Success
test_crossmodule_longjmp.cSuccessNone0.061010s0.159704s
Success
test_exec_nofork.cSuccessNone0.060056s0.154428s
Success
test_unlink_open_file.cSuccessNone0.056232s0.119864s
Success
thread-guard.cSuccessNone0.059735s0.147460s
Success
thread-test.cSuccessNone0.055216s0.136040s
Success
thread.cSuccessNone0.056155s0.137412s
Success
thread_cageid_race.cSuccessNone0.056354s0.310893s
Success
tls_test.cSuccessNone0.058477s0.183658s
Success
uname.cSuccessNone0.053464s0.123709s
Success
wait.cSuccessNone0.058250s0.175064s
Success
waitpid_anychild.cSuccessNone0.061879s0.154408s
Success
waitpid_syscall.cSuccessNone1.060409s1.262544s
Success
waitpid_wnohang.cSuccessNone0.061542s0.170636s
Success
Signal Tests
alarm.cSuccessNone7.059926s7.162546s
Success
eintr_fork_signal.cSuccessNone1.077648s1.167464s
Success
kill.cSuccessNone1.061149s1.157422s
Success
pause_test.cSuccessNone1.062325s1.162298s
Success
setitimer.cSuccessNone7.062162s7.162609s
Success
sigalrm.cSuccessNone2.061160s2.155207s
Success
sigaltstack.cSuccessNone0.063112s0.146449s
Success
sigchld.cSuccessNone1.063117s1.156817s
Success
signal-fork.cSuccessNone4.063410s4.156871s
Success
signal-simple.cSuccessNone0.071378s0.189723s
Success
signal_SIGCHLD.cSuccessNone0.060511s0.163155s
Success
signal_fork.cSuccessNone0.057931s0.164306s
Success
signal_int_ignored.cSuccessNone2.059009s2.159939s
Success
signal_kill_cleanup.cSuccessNone1.059122s1.147735s
Success
signal_procmask.cSuccessNone0.058197s0.141135s
Success
signal_read_interrupt.cSuccessNone0.565016s0.659810s
Success
signal_recursive.cSuccessNone0.058163s0.143776s
Success
signal_sa_mask.cSuccessNone0.064317s0.176439s
Success
signal_select_interrupt.cSuccessNone0.566267s0.665953s
Success
signal_write_interrupt.cSuccessNone1.063268s1.151913s
Success
sigpipe.cSuccessNone1.064021s1.166668s
Success
sigprocmask.cSuccessNone1.064163s1.145863s
Success
sigsuspend_test.cSuccessNone1.060626s1.161960s
Success
test_sigsetjmp.cSuccessNone0.061054s0.168644s
Success

Fail Tests

Summary

MetricCount
Total Test Cases6
Number of Successes6
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.055436s0.125737s
Success
Memory Tests
invalid_access_direct.cSuccessNone0.121676s0.136966s
Success
invalid_access_fork.cSuccessNone0.146420s0.157353s
Success
mmap-negative1.cSuccessNone0.135330s0.160287s
Success
mmap-negative2.cSuccessNone0.135324s0.151895s
Success
Signal Tests
signal_resethand.cSuccessNone1.062648s1.179105s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.404435s8.693517s
LIBCPP_SORT_OK 1 2 3

@qianxichen233 qianxichen233 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it probably makes sense to have the original link syscall directly calls the new linkat syscall for two reasons:

  1. it reduces the number of trusted code
  2. I think linux kernel also have an internal function that's called by both link and linkat

@DanielZ224 DanielZ224 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for implementing the missing linkat syscall path and adding regression tests. The syscall-number plumbing, glibc wrapper, syscall-table registration, and the basic success/error cases look reasonable. The tests also verify the resulting filesystem state rather than only checking the return value, which is important for the original issue.

However, I have two blocking concerns about the non-AT_FDCWD path handling.

1. Raw guest paths are passed directly to the host kernel

For a non-AT_FDCWD dirfd, the implementation translates the virtual fd to an underlying host fd, but then passes the raw guest pathname directly to libc::linkat().

This appears to bypass Lind's sandbox-aware path translation and confinement logic. In particular:

  • An absolute guest path would be resolved from the host root because the host kernel ignores dirfd for absolute paths.
  • A relative path containing .. may escape above the directory represented by the underlying fd.
  • The oldpath_cageid / newpath_cageid values do not appear to be used in these branches.

Could this reuse an existing sandbox-aware *at path-resolution helper, or introduce a shared helper that resolves a guest path relative to a virtual dirfd without exposing the raw host path?

The same concern applies to both oldpath and newpath.

2. Absolute paths should ignore the corresponding dirfd

linkat() should only validate and use a dirfd when the associated pathname is relative. When the pathname is absolute, the corresponding dirfd must be ignored.

The current implementation appears to translate and validate the dirfd before determining whether the pathname is absolute. As a result, a call such as:

linkat(-1, "/absolute/source", -1, "/absolute/destination", 0);

may incorrectly return EBADF, even though both dirfds should be ignored.

Could the implementation first determine whether each path is absolute, and only translate the corresponding dirfd for relative paths?

Suggested regression coverage

Please consider adding tests for:

  • A real olddirfd with a relative oldpath.
  • Both olddirfd and newdirfd being real directory descriptors.
  • Absolute paths combined with intentionally invalid dirfds.
  • .. traversal and other sandbox-confinement cases.
  • The default flags == 0 symlink behavior in addition to AT_SYMLINK_FOLLOW.

I also agree with the existing suggestion to share the trusted implementation between link and linkat, for example by implementing link through the equivalent linkat(AT_FDCWD, ..., AT_FDCWD, ..., 0) path. This would reduce duplicated security-sensitive path-resolution and hard-link logic.

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview
grate harness

Grate Test Report

MetricValue
Total15
Success15
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/copy-handler-table_grate.cSuccess
STDOUT:
[Grate|copy-handler-table] Registering geteuid handler for cage 2 in grate 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Cage|copy-handler-table] PASS: child inherited handler, then overwrite changed geteuid to 0
[Cage|copy-handler-table] PASS: parent=123 child_exit=0
[Grate|copy-handler-table] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.048322s3.098316s
Success
thread.cSuccessNone0.040669s3.181592s
Success
tls_test.cSuccessNone0.042517s3.189270s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm-math harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Math Tests
math_link_smoke.cSuccessNone0.046890s0.094424s
Success
math_tests.cSuccessNone0.046649s0.113097s
Success
printf_float.cSuccessNone0.047332s0.109595s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm-filesystem harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases75
Number of Successes75
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.041074s0.117438s
Success
chdir_getcwd.cSuccessNone0.041600s0.096914s
Success
chmod.cSuccessNone0.045116s0.109712s
Success
clock_gettime_highlevel.cSuccessNone0.097286s0.147164s
Success
clock_gettime_simple.cSuccessNone0.036623s0.089405s
Success
cloexec.cSuccessNone0.042129s0.117753s
Success
close.cSuccessNone0.051431s0.118291s
Success
copy_file_range.cSuccessNone0.043411s0.118299s
Success
creat_access.cSuccessNone0.043845s0.098213s
Success
cross_cage_fd_bruteforce.cSuccessNone0.044901s0.151115s
Success
doubleclose.cSuccessNone0.038458s0.085300s
Success
dup.cSuccessNone0.038918s0.097178s
Success
dup2.cSuccessNone0.043160s0.096028s
Success
dup3.cSuccessNone0.041667s0.097569s
Success
dupwrite.cSuccessNone0.044362s0.099721s
Success
etc_conf.cSuccessNone0.039522s0.098708s
Success
faccessat.cSuccessNone0.040809s0.154364s
Success
fchdir.cSuccessNone0.044827s0.104929s
Success
fchmod.cSuccessNone0.044794s0.107421s
Success
fchmodat.cSuccessNone0.040407s0.096673s
Success
fcntl.cSuccessNone0.043121s0.110481s
Success
fcntl_dupfd.cSuccessNone0.039805s0.092237s
Success
fdatasync.cSuccessNone0.043890s0.094865s
Success
filetest.cSuccessNone0.043393s0.092808s
Success
filetest1000.cSuccessNone0.050358s0.106808s
Success
flock.cSuccessNone0.052996s0.141368s
Success
fstat.cSuccessNone0.044752s0.108056s
Success
fstatfs.cSuccessNone0.040300s0.095299s
Success
fsync.cSuccessNone0.043367s0.096762s
Success
ftruncate.cSuccessNone0.046928s0.169417s
Success
getcwd.cSuccessNone0.040358s0.089934s
Success
getcwd_null.cSuccessNone0.043536s0.100298s
Success
getpgid.cSuccessNone0.039105s0.088515s
Success
getrandom.cSuccessNone0.043391s0.104102s
Success
ioctl.cSuccessNone0.047796s0.104479s
Success
link.cSuccessNone0.046151s0.129547s
Success
linkat.cSuccessNone0.046500s0.142128s
Success
locale_test.cSuccessNone0.049568s0.252908s
Success
lseek.cSuccessNone0.046792s0.153754s
Success
lstat.cSuccessNone0.045674s0.113809s
Success
mkdir_rmdir.cSuccessNone0.043175s0.101785s
Success
mkfifo_test.cSuccessNone0.047768s0.141885s
Success
mknod.cSuccessNone0.042421s0.102007s
Success
nocancel_io.cSuccessNone0.046245s0.116894s
Success
open.cSuccessNone0.039858s0.110625s
Success
openat.cSuccessNone0.040684s0.095590s
Success
path_conversion_safety.cSuccessNone0.046225s0.111840s
Success
ppoll.cSuccessNone0.046733s0.102621s
Success
pread_pwrite.cSuccessNone0.041783s0.104758s
Success
preadv_pwritev.cSuccessNone0.045431s0.110228s
Success
printf.cSuccessNone0.038307s0.084998s
Success
prlimit64.cSuccessNone0.039036s0.093029s
Success
read.cSuccessNone0.043756s0.108228s
Success
readbytes.cSuccessNone0.041501s0.091719s
Success
readdir_basic.cSuccessNone0.046587s0.127824s
Success
readlink.cSuccessNone0.043897s0.101417s
Success
readlinkat.cSuccessNone0.045113s0.105689s
Success
readv_writev_test.cSuccessNone0.044757s0.106732s
Success
rename.cSuccessNone0.044836s0.098818s
Success
renameat.cSuccessNone0.045229s0.109375s
Success
sc-writev.cSuccessNone0.042183s0.098371s
Success
stat.cSuccessNone0.044643s0.107509s
Success
statfs.cSuccessNone0.040218s0.090301s
Success
symlink.cSuccessNone0.045023s0.124016s
Success
sync_file_range.cSuccessNone0.042289s0.093087s
Success
timespec_time_t_compat.cSuccessNone0.042079s0.092796s
Success
trailing_slash.cSuccessNone0.043154s0.104752s
Success
truncate.cSuccessNone0.045676s0.116164s
Success
unlink.cSuccessNone0.045035s0.125127s
Success
unlinkat.cSuccessNone0.045136s0.113554s
Success
utimensat.cSuccessNone0.043770s0.111945s
Success
write.cSuccessNone0.038343s0.088615s
Success
writeloop.cSuccessNone0.045463s0.097314s
Success
writepartial.cSuccessNone0.044371s0.091338s
Success
writev.cSuccessNone0.043966s0.101914s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm-memory harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases28
Number of Successes28
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
brk.cSuccessNone0.042747s0.095105s
Success
fork_large_memory.cSuccessNone0.067812s0.391463s
Success
malloc.cSuccessNone0.044082s0.088118s
Success
malloc_large.cSuccessNone0.043584s0.095766s
Success
memcpy.cSuccessNone0.072167s0.112550s
Success
memory_error_test.cSuccessNone0.044614s0.111903s
Success
mmap.cSuccessNone0.038494s0.088482s
Success
mmap_address_truncation.cSuccessNone0.040981s0.093635s
Success
mmap_aligned.cSuccessNone0.039978s0.099497s
Success
mmap_complicated.cSuccessNone0.044301s0.217398s
Success
mmap_file.cSuccessNone0.043348s0.102391s
Success
mmap_shared.cSuccessNone0.043379s0.114346s
Success
mmaptest.cSuccessNone0.039947s0.095529s
Success
mprotect.cSuccessNone0.040049s0.089656s
Success
mprotect_boundary.cSuccessNone0.059086s0.197269s
Success
mprotect_end_region.cSuccessNone0.038631s0.107345s
Success
mprotect_middle_region.cSuccessNone0.039417s0.093907s
Success
mprotect_multiple_times.cSuccessNone0.059145s0.206828s
Success
mprotect_same_value.cSuccessNone0.039960s0.092102s
Success
mprotect_spanning_regions.cSuccessNone0.040687s0.106049s
Success
munmap_adjacent_shm.cSuccessNone0.048247s0.112148s
Success
sbrk.cSuccessNone0.041548s0.094437s
Success
segfault.cSuccessNone0.044703s0.131378s
Success
shm.cSuccessNone0.058341s0.133280s
Success
shmtest.cSuccessNone0.041180s0.099097s
Success
thread_malloc_sequential.cSuccessNone0.084658s0.235603s
Success
vmmap_escape.cSuccessNone0.089457s0.250530s
Success
vtable.cSuccessNone0.047695s0.153109s
Success

Fail Tests

Summary

MetricCount
Total Test Cases4
Number of Successes4
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
invalid_access_direct.cSuccessNone0.101009s0.093256s
Success
invalid_access_fork.cSuccessNone0.170335s0.120463s
Success
mmap-negative1.cSuccessNone0.131767s0.230106s
Success
mmap-negative2.cSuccessNone0.093357s0.112095s
Success
wasm-process harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases57
Number of Successes57
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Process Tests
barrier_test.cSuccessNone0.042640s0.115476s
Success
chain_thread.cSuccessNone1.044426s1.127714s
Success
ctor_syscall_test.cSuccessNone0.037725s0.088605s
Success
cxa_atexit_test.cSuccessNone0.048609s0.093086s
Success
exec_non_utf8.cSuccessNone0.043926s0.097082s
Success
execve_shebang.cSuccessNone0.044537s0.101025s
Success
exit.cSuccessNone0.041630s0.093227s
Success
exit_failure.cSuccessNone0.043772s0.112750s
Success
exit_group_thread.cSuccessNone0.043865s0.131121s
Success
exit_status_first_wins.cSuccessNone0.045464s0.134226s
Success
flockfile_test.cSuccessNone0.043432s0.124514s
Success
fork2malloc.cSuccessNone0.045490s0.114677s
Success
fork_select.cSuccessNone0.042425s0.122209s
Success
fork_simple.cSuccessNone0.042487s0.111068s
Success
fork_syscall.cSuccessNone0.046613s0.515703s
Success
fork_tls_ctype.cSuccessNone0.045624s0.130750s
Success
forkandopen.cSuccessNone0.044577s0.127364s
Success
forkdup.cSuccessNone0.045246s0.122477s
Success
forkexecuid.cSuccessNone0.041100s0.132547s
Success
forkexecv-arg.cSuccessNone0.041819s0.133076s
Success
forkexecv.cSuccessNone0.048566s0.127329s
Success
forkfiles.cSuccessNone0.056632s0.147321s
Success
forkmalloc.cSuccessNone0.044609s0.112717s
Success
forknodup.cSuccessNone0.043877s0.125111s
Success
function-ptr.cSuccessNone0.040560s0.092972s
Success
getegid_syscall.cSuccessNone0.044274s0.388972s
Success
getgid_syscall.cSuccessNone0.045170s0.394701s
Success
getpid.cSuccessNone0.038534s0.087159s
Success
getpid_syscall.cSuccessNone0.045933s0.411244s
Success
getppid.cSuccessNone0.044730s0.114366s
Success
getppid_syscall.cSuccessNone0.046659s0.324750s
Success
getuid.cSuccessNone0.044948s0.095131s
Success
getuid_syscall.cSuccessNone0.042361s0.204415s
Success
hello-arg.cSuccessNone0.037478s0.092701s
Success
hello.cSuccessNone0.037143s0.085391s
Success
longjmp.cSuccessNone0.037640s0.096747s
Success
mutex.cSuccessNone2.046159s2.112209s
Success
printf_deadlock_smoke.cSuccessNone0.049511s0.144122s
Success
printf_thread_test.cSuccessNone0.041526s0.121893s
Success
sem_forks.cSuccessNone0.045581s0.149969s
Success
sem_slow_path.cSuccessNone1.045559s1.120860s
Success
setjmp_edge.cSuccessNone0.040758s0.162511s
Success
setsid.cSuccessNone0.039936s0.092875s
Success
template.cSuccessNone0.043594s0.156628s
Success
test_crossmodule_longjmp.cSuccessNone0.044355s0.120704s
Success
test_exec_nofork.cSuccessNone0.042862s0.117686s
Success
test_unlink_open_file.cSuccessNone0.040929s0.089603s
Success
thread-guard.cSuccessNone0.043081s0.109818s
Success
thread-test.cSuccessNone0.040462s0.101680s
Success
thread.cSuccessNone0.040576s0.108470s
Success
thread_cageid_race.cSuccessNone0.041819s0.242974s
Success
tls_test.cSuccessNone0.042919s0.136092s
Success
uname.cSuccessNone0.038312s0.088647s
Success
wait.cSuccessNone0.040266s0.160058s
Success
waitpid_anychild.cSuccessNone0.044312s0.115609s
Success
waitpid_syscall.cSuccessNone1.044423s1.196821s
Success
waitpid_wnohang.cSuccessNone0.045009s0.119509s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm-signals harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases24
Number of Successes24
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Signal Tests
alarm.cSuccessNone7.042555s7.123673s
Success
eintr_fork_signal.cSuccessNone1.045635s1.124782s
Success
kill.cSuccessNone1.042513s1.114823s
Success
pause_test.cSuccessNone1.043916s1.120179s
Success
setitimer.cSuccessNone7.044054s7.126504s
Success
sigalrm.cSuccessNone2.042763s2.116772s
Success
sigaltstack.cSuccessNone0.044375s0.107400s
Success
sigchld.cSuccessNone1.044280s1.117374s
Success
signal-fork.cSuccessNone4.043693s4.112170s
Success
signal-simple.cSuccessNone0.042882s0.098338s
Success
signal_SIGCHLD.cSuccessNone0.041536s0.119238s
Success
signal_fork.cSuccessNone0.040637s0.119276s
Success
signal_int_ignored.cSuccessNone2.043600s2.116382s
Success
signal_kill_cleanup.cSuccessNone1.041522s1.111618s
Success
signal_procmask.cSuccessNone0.039343s0.097871s
Success
signal_read_interrupt.cSuccessNone0.545297s0.621320s
Success
signal_recursive.cSuccessNone0.039759s0.105254s
Success
signal_sa_mask.cSuccessNone0.040434s0.095273s
Success
signal_select_interrupt.cSuccessNone0.545561s0.624057s
Success
signal_write_interrupt.cSuccessNone1.044876s1.111723s
Success
sigpipe.cSuccessNone1.045065s1.122061s
Success
sigprocmask.cSuccessNone1.044295s1.102287s
Success
sigsuspend_test.cSuccessNone1.040996s1.122198s
Success
test_sigsetjmp.cSuccessNone0.043417s0.122743s
Success

Fail Tests

Summary

MetricCount
Total Test Cases1
Number of Successes1
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Signal Tests
signal_resethand.cSuccessNone1.042047s1.112003s
Success
wasm-networking harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases44
Number of Successes44
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Networking Tests
accept4.cSuccessNone0.047518s0.110522s
Success
dns_resolve_test.cSuccessNone0.044007s0.098389s
Success
dnstest.cSuccessNone0.044638s0.097876s
Success
epoll_badfd.cSuccessNone0.040037s0.094054s
Success
epoll_edge_triggered.cSuccessNone0.199830s0.336838s
Success
epollcreate1.cSuccessNone0.043511s0.106112s
Success
error_handling_net.cSuccessNone0.049567s0.159383s
Success
getaddrinfo_test.cSuccessNone0.046186s0.126039s
Success
getaddrinfo_unspec.cSuccessNone0.049852s0.149832s
Success
gethostname.cSuccessNone0.039320s0.087799s
Success
getifaddrs.cSuccessNone0.046374s0.101815s
Success
getsockname.cSuccessNone0.045294s0.099628s
Success
getsockopt.cSuccessNone0.043410s0.132294s
Success
ipv6_basic.cSuccessNone0.046313s0.127049s
Success
makepipe.cSuccessNone0.038962s0.086986s
Success
nonblocking_eagain.cSuccessNone0.045418s0.133331s
Success
pipe.cSuccessNone0.045899s0.108957s
Success
pipe2.cSuccessNone0.045494s0.100621s
Success
pipeinput.cSuccessNone0.046723s0.127589s
Success
pipeinput2.cSuccessNone0.046295s0.131941s
Success
pipeonestring.cSuccessNone0.046297s0.128107s
Success
pipepong.cSuccessNone0.045823s0.133739s
Success
pipewrite.cSuccessNone0.041604s0.097122s
Success
poll.cSuccessNone0.044078s0.096330s
Success
recvfrom-sendto.cSuccessNone0.045668s0.107846s
Success
sendmsg_recvmsg_test.cSuccessNone0.045832s0.108457s
Success
serverclient.cSuccessNone0.045230s0.112854s
Success
shutdown.cSuccessNone0.044293s0.107426s
Success
shutdown_fork.cSuccessNone0.044718s0.120728s
Success
simple-select.cSuccessNone0.045911s0.130447s
Success
simple_epoll.cSuccessNone0.044953s0.101388s
Success
socket.cSuccessNone0.044180s0.103476s
Success
socket_cloexec.cSuccessNone0.043075s0.098327s
Success
socket_options_advanced.cSuccessNone0.048374s0.139798s
Success
socketepoll.cSuccessNone0.042444s0.096100s
Success
socketpair.cSuccessNone0.043911s0.114723s
Success
socketselect.cSuccessNone0.042959s0.102364s
Success
udp_send_recv.cSuccessNone0.148808s0.243798s
Success
uds-getsockname.cSuccessNone0.045245s0.101137s
Success
uds-nb-select.cSuccessNone2.052147s2.158755s
Success
uds-serverclient.cSuccessNone0.046324s0.134170s
Success
uds-socketselect.cSuccessNone0.045672s0.107516s
Success
uds_listen_poll.cSuccessNone1.049245s1.141078s
Success
writev_socket.cSuccessNone0.046944s0.131771s
Success

Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0
wasm-dynamic-linking harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases7
Number of Successes7
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
basic.cSuccessNone0.041151s0.096784s
Success
dlopen_fork.cSuccessNone0.042035s0.118615s
Success
dlopen_thread.cSuccessNone0.043181s0.118261s
Success
double_fork_dlopen.cSuccessNone0.045404s0.158430s
Success
fork_dlopen.cSuccessNone0.042835s0.119349s
Success
longjmp_dlopen.cSuccessNone0.040653s0.111358s
Success
rdynamic_main.cSuccessNone0.042523s0.117268s
Success

Fail Tests

Summary

MetricCount
Total Test Cases1
Number of Successes1
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.036025s0.092615s
Success

@Yaxuan-w
Yaxuan-w merged commit 34f7c86 into main Aug 12, 2026
3 checks passed
@Yaxuan-w
Yaxuan-w deleted the add-linkat branch August 12, 2026 18:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: linkat not working

3 participants